iOS アプリ設計パターン入門
#ソフトウェア設計 #iOS #書籍
https://peaks.cc/books/iOS_architecture
https://peaks-img.s3-ap-northeast-1.amazonaws.com/ios_architecture_book_cover_alpha.png
感想 nobuoka.icon
iOS アプリに限らず、アプリケーション設計についての歴史や思想の概要を学ぶには良い本だった
特に 1 部が良かった
歴史的ないろいろなアーキテクチャパターンの説明とか
MVP とか MVVM とかは GUI アーキテクチャである、という説明とか
一方で、iOS 固有の話でいうと、どのようにモジュール分割を実現するか、というような話がないのは残念
個人的にはソフトウェア設計におけるレイヤ分割だったり機能ごとの分割にモジュール分割が必要だと思っているので、どのようにモジュール分割を実践するのか、というような話は欲しかった
内容メモ
1 部 設計を知る
1 章 設計するということ (関義隆)
ソフトウェア設計の根幹にある考え
関心の分離
複雑な問題をより単純な問題に切り分けて考えるため、システムもモジュールで構成されている必要
設計パターン (再現性のある問題に対する共通の解決策) が強い味方
本書におけるアーキテクチャは、アプリにおける大まかなレイヤー分割の捉え方
2 章 設計にパターンを適用する前に
高凝集、疎結合
Swift コミュニティは API Design Guidelines を公開している
正しい名前に向き合う
iOS アプリ開発の多くの現場ではアジャイル開発が採用されている
アジャイル開発では、設計の原則を適用して問題を分析する
有名なところだと SOLID 原則
設計原則はコードの臭いを取り除くもの
オーバーエンジニアリングは避けること (YAGNI、KISS)
nobuoka.icon KISS のことを 「Keep it simple, stupid」 じゃなくて 「Keep it simple, small」 って言ってるの、はじめて見た
適切な設計の判断のためには変更可能性がどこにあるか知る必要
とはいえ想定しない変更が発生することはしばしば → リファクタリングで対応
リファクタリングにはテストが必要
テストは実装を早くするためのもの
テスト駆動開発のプラクティスでは、開発者の実装を助けるテストがチェッキングで、テスティング (品質保証のためのもの) と区別
最速のテストは型付け
パターンが最初にあるのではなく、コードを修正する過程でパターンを見出す
問題領域を理解するためにパターンを使う
3 章 Swift らしく設計する (関義隆)
SOLID 原則
S : 単一責任原則 (Single Responsibility Principle)
D : 依存関係逆転の原則 (Dependency Inversion Principle)
エラーの 4 分類
契約による設計
Protocol-Oriented Programming
4 章 アーキテクチャのパターンを鳥瞰する (関義隆)
iOS のアーキテクチャと呼ばれるものは 2 種類あり、本書では以下のように呼ぶ
GUI アーキテクチャ : Presentation Domain Separation (PDS) を実践
MVP や MVC、MVVM はこっち
システムアーキテクチャ
GUI アーキテクチャの歴史
Model-View-Controller から Presentation Model パターンと Application Model パターン、そして Model-View-ViewModel へ
Model-View-Presenter
Flux、Redux
システムアーキテクチャの歴史
レイヤードアーキテクチャ
Hexagonal Architecture
Onion Architecture
Clean Architecture
モバイルアプリにおいて重要な画面遷移
Coordinator パターンと MVVM-C
Router パターンと VIPER
Micro View Controller
2 部 iOS アプリのための設計パターン
5 章 MVC (史翔新)
原初 MVC
Cocoa MVC
6 章 MVP (田中賢治、加藤寛人)
MVP の目的はテスト容易性と作業分担のしやすさ
言い換えると保守性
MVP (Passive View) と MVP (Supervising Controller)
コンポーネント間のデータ同期方法 2 つ
フロー同期 (Flow Synchronization)
オブザーバー同期 (Observer Synchronization)
Presenter はたいてい View にたいして 1 つ作成
7 章 MVVM (田中賢治)
Model-View-ViewModel
8 章 Flux (鈴木大貴)
Flux
9 章 Redux (杉上洋平)
Redux
iOS アプリ開発向けにいくつかライブラリがある : ReSwift
10 章 Clean Architecture (松館大輝、加藤寛人)
クリーンアーキテクチャ
VIPER
11 章 アプリの起動経路 - Appliation Coordinator の導入 (松館大輝)
Coordinator パターン
12 章 画面遷移のパターン - Router の導入 (田中賢治)
Router パターン
13 章 第 2 部のまとめ - アーキテクチャの選定基準 (松館大輝)
アーキテクチャパターンをどのような基準で選ぶべきか?
アプリに求められるような機能要件、非機能要件
参考 : 非機能要件要求仕様定義ガイドライン
チームの熟練度やリードできる人の存在
そのアーキテクチャパターンを好きになれるか
そのアーキテクチャパターンが目的にならないように
3 部 設計をサービスに導入する
14 章 Flux の導入例 (鈴木大貴)
15 章 Redux の導入例 - 大規模アプリケーションに Redux を導入する (杉上洋平)
株式会社 FOLIOI の新規アプリ開発で Redux を導入
RxSwift を活用
差分アルゴリズムによる view の部分更新
Web アプリケーションだと React (JS) が使われる
iOS には IGListKit を導入